<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>数组的方法</title>
</head>
<body>
    
</body>
</html>
<script>

    /*
        concat()可以连接两个或多个数组，并将新的数组返回
            - 该方法不会影响原数组
    */
    var arr=["孙悟空","猪八戒","沙和尚"];
    var arr2=["白骨精","蜘蛛精","玉兔精"];
    var arr3=["玉皇大帝","王母娘娘","太上老君"];

    var result = arr.concat(arr2,arr3,"牛魔王","铁扇公主","红孩儿");
    console.log(typeof result,result);

    /*
        join()
            - 该方法可以将数组转换为一个字符串
            - 该方法不会对原数组产生影响，而是将转换后的字符串作为结果返回
            - 再join() 中可以指定一个字符串作为参数，这个字符串将会成为数组中元素的连接符
                如果不指定连接符，则默认使用 , 作为连接符
    */
    arr=["孙悟空","猪八戒","沙和尚","唐僧"];
    result = arr.join("++++");
    console.log(typeof result,result);

    /*
        reverse()
            - 该方法用来反转数组（前边的去后边，后边的去前边）前后颠倒
            - 该方法会直接修改原数组 ❗❗❗
    */
    arr.reverse();
    console.log(arr);

    /*
        sort()
            - 可以对数组中的元素进行排序
            - 默认会按照Unicode编码进行排序
            - 会影响原数组 ❗❗❗
    */
    arr =["a","b","c","d","e","f","g"]; 
    
    console.log(arr.sort());
    console.log(arr.reverse());

    /*
        即使对于纯数字的数组，使用sort()排序时，也会按照Unicode编码排序
            所以对数字进行排序时，可能会得到错误的结果

        我们可以自己来指定排序的规则
            我们可以再sort()添加一个回调函数，来指定排序规则，
                回调函数中需要定义两个形参
                浏览器将会分别使用数组中的元素作为实参去调用函数
                使用哪个元素调用不稳定，但肯定的是再数组中a一定在b前面
            - 浏览器会根据回调函数的返回值来决定元素的顺序，
                如果返回一个大于 0 的值，则元素会交换位置
                如果返回一个小于 0 的值，则元素位置不变
                如果返回一个 0，则认为两个元素相等，也不交换位置

             如果需要升序排列 a - b ⭐
                    降序排列 b - a ⭐
    */
    arr =[12,5,4,2,1,8];
    arr.sort(function(a,b){
        // 升序排列
        return a-b;
        // 降序排列
        return b-a;
    });
    console.log(arr);
</script>